package net.oschina.bilbodai.common.retrofitor.annotation;

import net.oschina.bilbodai.common.retrofitor.core.IURLProvider;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author daimao  Date: 16/4/14 Time: 下午2:55
 * @version $Id$
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface HttpService {
    /**
     * @return 这个httpservice对应的根URL,如:https://api.github.com/
     * 注意,查找逻辑优先级 baseUrl , IURLProvider , IGlobalURLProvider,如果都未找到,则创建过程报错
     */
    String baseUrl() default "";

    /**
     * @return 采用单独的一个逻辑为这个Service提供BaseURl
     */
    Class<? extends IURLProvider> urlProvider() default IURLProvider.class;

    /**
     * @return 如果要为这个服务单独指定httpClient,则通过解析时会通过这个字段从容器中获取
     */
    String httpClientRef() default "";

    /**
     * @return 如果为true,则当httpClientRef为空的时候,会先去上下文获取全局的HttpClient,如果未找到,则抛出异常
     * 如果想为这个服务单独初始化一个默认的HttpClient,则把这个设置为false.并且不要设置httpClientRef
     */
    boolean httpClientAutoInject() default true;

    /**
     * @return 从容器中查找相关的converter,如果为空,则默认添加Jackson
     */
    String[] converterFactories() default {};

    /**
     * @return 从容器中查找相关的adapter
     */
    String[] adapterFactories() default {};

    /**
     * @return 如果为true,则默认会加入jackson,xml的converter
     */
    boolean useDefaultConverters() default true;

    /**
     * 如果为true,则会自动搜索spring上下文中的{@link retrofit2.Converter.Factory}并注入到实例中
     * @return 是否自动注入
     */
    boolean convertersAutoInject() default true;

    /**
     * 如果为true,则会自动搜索spring上下文中的{@link retrofit2.CallAdapter.Factory}并注入到实例中
     * @return 是否自动注入
     */
    boolean adapterAutoInject() default true;
}